package com.hlkj.baojin.dao.repository;

import com.hlkj.baojin.constant.BaojinConstant;
import com.hlkj.baojin.dao.repository.utils.DaoQueryUtils;
import com.hlkj.baojin.jwt.TokenExpiration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

/**
 * lzx
 */
@Repository
public class TokenExpirationRepository {
    private final MongoTemplate mongoTemplate;

    @Autowired
    public TokenExpirationRepository(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    /**
     * 添加一个用户登录记录
     *
     * @param tokenExpiration
     */
    public void save(TokenExpiration tokenExpiration) {
        mongoTemplate.save(tokenExpiration);
    }

    /**
     * 更新该用户所有token失效
     *
     * @param name
     */
    public void disableBySubectName(String name) {
        Query query = Query.query(Criteria.where("subjectName").is(name).and("tokenUse").is(true).and("delete").is(Boolean.FALSE));
        //排序
        DaoQueryUtils.query(query);
        Update update = Update.update("tokenUse", false);
//      Update update=Update.update("tokenUse",false).set("tokenUse",false).set("tokenUse",false);
        mongoTemplate.updateMulti(query, update, TokenExpiration.class);
    }

    /**
     * 验证 tokenid 状态是使用状态
     *
     * @param tokenId
     * @return
     */
    public boolean validateToken(String tokenId) {
        Query query = Query.query(Criteria.where("tokenId").is(tokenId).and("tokenUse").is(true).and("delete").is(BaojinConstant.NO_DELETE));
        long count = mongoTemplate.count(query, TokenExpiration.class);
        return count > 0L ? Boolean.TRUE : Boolean.FALSE;
    }


//特殊更新，更新author为jason的数据，如果没有author为jason的数据则以此条件创建一条新的数据
//当没有符合条件的文档，就以这个条件和更新文档为基础创建一个新的文档，如果找到匹配的文档就正常的更新。
//    query = Query.query(Criteria.where("author").is("jason"));
//    update = Update.update("title", "MongoTemplate").set("visitCount", 10);
//    mongoTemplate.upsert(query, update, Article.class);


}
